package beans;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

import model.Ticket;

import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity
@Table(name="cajasDiarias")
public class CajaDiariaBean implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="idCajaDiaria",nullable=false)
	private int idCajaDiaria;
	
	@OneToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL)
	@Fetch(FetchMode.SUBSELECT)
	@JoinColumn(name="idCajaDiaria")
	private List<FacturaBean> facturas;
	
	@Column(name="estado")
	private String estado;
	
	@Column(name="fecha")
	private Date fecha;
	
	@Column(name="total")
	private float total;
	
	@OneToMany( fetch=FetchType.EAGER) //cascade=CascadeType.ALL, Solo se debe persistir en el pago
	@Fetch(FetchMode.SUBSELECT)
	@JoinColumn(name="idCajaDiaria")
	private List<ItemBilleteBean> efectivoTotal;
	
	@OneToMany(fetch=FetchType.EAGER) //cascade=CascadeType.ALL, Solo se debe persistir en el pago
	@Fetch(FetchMode.SUBSELECT)
	@JoinColumn(name="idCajaDiaria")
	private List<TicketBean> ticketsTotal;
	
	

	@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
	@Fetch(FetchMode.SUBSELECT)
	@JoinColumn(name="idCajaDiaria")
	private List<PagoBean> pagos;
	
	@Column(name="fechaCierre")
	private Date horaCierre;

	public CajaDiariaBean(){
		this.efectivoTotal=new ArrayList<ItemBilleteBean>();
		this.facturas=new ArrayList<FacturaBean>();
		this.pagos=new ArrayList<PagoBean>();
		this.ticketsTotal=new ArrayList<TicketBean>();
	}
	
	public int getIdCajaDiaria() {
		return idCajaDiaria;
	}

	public List<TicketBean> getTicketsTotal() {
		return ticketsTotal;
	}

	public void setTicketsTotal(List<TicketBean> ticketsTotal) {
		this.ticketsTotal = ticketsTotal;
	}
	
	public void setIdCajaDiaria(int idCajaDiaria) {
		this.idCajaDiaria = idCajaDiaria;
	}

	public List<FacturaBean> getFacturas() {
		return facturas;
	}

	public void setFacturas(List<FacturaBean> facturas) {
		this.facturas = facturas;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public Date getFecha() {
		return fecha;
	}

	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}

	public float getTotal() {
		return total;
	}

	public void setTotal(float total) {
		this.total = total;
	}

	public List<ItemBilleteBean> getEfectivoTotal() {
		return efectivoTotal;
	}

	public void setEfectivoTotal(List<ItemBilleteBean> efectivoTotal) {
		this.efectivoTotal = efectivoTotal;
	}

	public List<PagoBean> getPagos() {
		return pagos;
	}

	public void setPagos(List<PagoBean> pagos) {
		this.pagos = pagos;
	}

	public Date getHoraCierre() {
		return horaCierre;
	}

	public void setHoraCierre(Date horaCierre) {
		this.horaCierre = horaCierre;
	}
	
	
}
